package 左哥算法.ch08前缀树;

import java.util.*;

/**
 * 后端接收前端文件夹。
 * 前端发送文件夹给后端时，并不是发送一个目录的结构
 * 而是将目录中的所有文件发送给后端，这些的文件名包含了这些路径信息。
 * 我们后端就是将这些路径信息组织成一个树结构。并将它按层次遍历
 * 例如前端发送  /a/b/1.txt  /a/b/2.txt  /a/c/f/3.txt
 * 表示前端发送了这样的一个文件夹
 * a
 * b                           c
 * 1.txt     2.txt                 f
 * 3.txt
 */
public class 后端接收前端文件夹 {

    public static void main(String[] args) {
        String[] files={
                "a/b/1.txt",
                "a/b/2.txt",
                "a/c/f/3.txt",
        };
        fun(files);
    }

    public static void fun(String[] files) {
        Trie root = new Trie("root");
        for (String file : files) {
            Trie cur = root;
            String[] names = file.split("/");
            for (String name : names) {
                Trie next = cur.nexts.computeIfAbsent(name, k -> new Trie(name));
                cur = next;
            }
        }
        print(root);
    }
    //遍历
    public static void print(Trie root){
        Queue<Trie> queue=new ArrayDeque<>();
        queue.add(root);
        while (!queue.isEmpty()) {
            int size = queue.size();
            StringBuilder builder=new StringBuilder();
            for (int i = 0; i < size; i++) {    //打印同一层
                Trie cur = queue.poll();
                builder.append(cur.val).append(" ");
                queue.addAll(cur.nexts.values());
            }
            System.out.println(builder);
        }
    }

    static class Trie {
        String val;
        Map<String, Trie> nexts=new LinkedHashMap<>();

        public Trie(String val) {
            this.val = val;
        }

    }
}
